![]() Verfahren zum Ändern von Programmobjektcode bei Quelltextänderungen
专利摘要:
DieErfindung beschreibt ein Verfahren, nach dem eine Korrekturanweisung(33) nach Änderungenim Modulquelltext eines modular aufgebauten Programms erstellt wird.Gemäß der Korrekturanweisung (33)kann aus dem ursprünglichenProgrammobjektcode (30) ein korrigierter Programmobjektcode (32)gebildet werden, ohne alle Module des Programms erneut von einemLinker (41) zusammenzufügen.Unter Verwendung des ursprünglichenModulquelltextes (10), dem ein ursprünglicher Modulobjektcode (20)entspricht, und einer Änderungsanweisung(12) wird dazu von einem Compiler (40) ein korrigierter Modulobjektcode(22) erzeugt. Aus einem Vergleich des ursprünglichen Modulobjektcodes (20) mitdem korrigierten Modulobjektcode (22) wird die Korrekturanweisung(33) erstellt. 公开号:DE102004022183A1 申请号:DE200410022183 申请日:2004-05-05 公开日:2005-12-01 发明作者:Ullrich Engelbrecht 申请人:Fujitsu Technology Solutions GmbH; IPC主号:G06F9-445
专利说明:
[0001] DieErfindung beschreibt ein Verfahren zum Erstellen einer Korrekturanweisungzur Änderung vonProgrammobjektcode eines auf der Ebene der Quelltexte modular aufgebautenProgramms bei Änderungenim Quelltext eines Moduls gemäß dem Oberbegriffdes Anspruchs 1. [0002] Ausführbare Computerprogrammebestehen aus einer binärenSequenz von Maschinencodebefehlen, dem Programmobjektcode. Entsprechendder Syntax der Maschinencodebefehle ist der Programmobjektcode prozessorabhängig. [0003] Dadie Maschinencodebefehle in ihrer binären Repräsentation sehr unanschaulichsind, wird Programmobjektcode üblicherweiseauf eine der drei im folgenden beschriebenen Arten erstellt. [0004] Zujedem Maschinencodebefehl wird ein mnemonisches Kürzel alsSynonym definiert, wobei die Zuordnung in beide Richtungen eindeutigist. Das Programm wird dann als lesbarer Quelltext in dieser Synonymsprachegeschrieben und anschließendin den ausführbarenProgrammobjektcode übersetzt. DieSynonymsprache und auch das Programm, das zum Übersetzen benutzt wird, werdenals Assembler, der Vorgang als Assemblieren bezeichnet. In Assemblergeschriebene Programme sind schnell und speichereffizient, erfordernallerdings hohen Programmieraufwand – insbesondere wenn sie für einenProzessor geschrieben werden, der nur über einen sehr eingeschränkten Befehlssatzverfügt. [0005] Eineweitere Möglichkeit,Programmobjektcode zu erzeugen besteht darin, das Programm in derSynonymsprache eines Prozessortyps zu schreiben und von einem sogenanntenCross-Assemblerin Maschinencodebefehle füreinen anderen Prozessortyp zu übersetzen.Cross-Assembler ermöglichendamit auch, auf der Basis eines Quellcodes ausführbare Programmobjektcode für verschiedeneProzessortypen zu erzeugen. Sie erleichtern die Programmierung insofern,dass die Synonymsprache eines Prozessors, der über einen weiten Befehlssatzverfügt, benutztwerden kann. [0006] Beider dritten Methode bedient sich der Programmierer einer sogenanntenHochsprache, wie Fortran, Pascal, C usw., die unabhängig vomProzessortyp ist und komplexe Anweisungen zulässt. Das Übersetzungsprogramm wird indiesem Fall üblicherweiseCompiler genannt. Der Programmieraufwand ist in diesem Fall am geringsten,der erzeugte Programmobjektcode ist jedoch weniger speichereffizientund weniger gut geschwindigkeitsoptimiert. [0007] ImRahmen dieser Anmeldung umfasst der Begriff Compiler sowohl Assembler,Cross-Assembler sowie Compiler im obigen Sinne. Quelltext bezeichnetim folgenden eine Folge von Anweisungen entweder in Assembler odereiner Hochsprache. Als Objektcode wird die beim Übersetzen des Quellcodes vomCompiler entstehende Sequenz an Maschinencodebefehlen bezeichnet. [0008] KomplexeProgramme werden üblicherweise nichtals ein Quelltext-Dokument erstellt, sondern statt dessen in mehrerekleine funktionelle Untereinheiten, Module genannt, unterteilt.Module, die nicht programmspezifisch, sondern von universellerem Nutzenfür verschiedensteProgramme sind, werden häufigin Form einer Zusammenstellung (Bibliothek) abgelegt. Zum Erstellendes Programmobjektcodes werden die Quelltexte zunächst modulweisevom Compiler in Objektcode, dann Modulobjektcode genannt, übersetzt.Ein zweites Programm, der sogenannte Linker, fügt dann den Modulobjektcodealler von dem Programm benutzten Module zum Programmobjektcode zusammen.Zusätzlichwird vom Linker eine Tabelle eingefügt, in der der Name der benutztenModule sowie die relative Adresse innerhalb des Programmobjektcodes,unter der diese Module zu finden sind, gespeichert ist. Diese Information istwichtig, falls Sprüngeinnerhalb des Programms in ein bestimmtes Modul notwendig sind oderfalls Zugriff auf Daten erfolgen soll, die in den Modulen gespeichertsind. [0009] DerVorteil des modularen Konzepts liegt neben der größeren Übersichtlichkeitdarin, dass bei Änderungennur der Quelltext der geändertenModule neu übersetztwerden muss, nicht der Quelltext des gesamten Programms. Allerdingsmuss in jedem Fall das gesamte Programm neu durch Linken zusammengefügt werden.Auch dieses kann noch sehr aufwändigsein, insbesondere bei komplexen Programmen mit sehr vielen Modulen,wie es z.B. Betriebssysteme sind. Hinzu kommt, dass Änderungen imQuelltext einzelner Module typischerweise vom Programmierer durchgeführt werden,das Linken allerdings unter Umständenbeim Anwender geschehen muss, da viele benutzerspezifische oderkonfigurationsabhängigeModule im Programm vorhanden sind. Für den Benutzer ist dieser Prozessnicht nur zeitaufwändig,sondern birgt darüberhinaus die Gefahr, dass durch Eingeben falscher Parameter beim Linkenein nicht funktionstüchtigerProgrammobjektcode erstellt wird. [0010] EineMöglichkeit,um vom Anwender zumindest kleine Änderungen durchführen zulassen, besteht darin, eine Korrekturanweisung in Form einer Dateizu erstellen, in der einzelne Bytes oder eine Folge von Bytes, dieim Objektcode eines bestimmten Moduls zu tauschen ist, gelistetsind. Diese Korrekturanweisung wird von einem beim Benutzer vorhandenenProgramm ausgewertet, das die entsprechenden Austauschoperationenam Programmobjektcode durchführt.Diese Vorgehensweise ist zwar fürden Anwender unkompliziert durchzuführen, aber nur bei minimalen Änderungenpraktikabel. [0011] DieKorrekturanweisung gibt Änderungen aufEbene des Objektcodes an. Sehr kleine Änderungen am Objektcode wiez.B. falsche Wertezuweisung oder eine falsche Sprungadresse lassensich auf dieser Ebene vom Programmierer manuell korrigieren. Weiterreichende Änderungenlassen sich auf dieser Ebene so gut wie nicht durchführen, sondernwerden von den Programmentwicklern auf Ebene des Quelltextes ausgeführt. Selbstkleine Änderungenim Quelltext führenaber auf schwer vorhersehbare Art zu komplexen Änderungen im Objektcode. Diezur Anpassung des Programmobjektcodes notwendigen Korrekturanweisungensind nur mühevollanzugeben, wenn der Objektcode durch einen Assembler erzeugt wird.Wenn der Quellcode aber durch einen Cross-Assembler oder Hochsprachencompilererzeugt wird, ist es fürden Programmierer bislang praktisch nicht möglich, Korrekturanweisungenanzugeben. [0012] Aufgabeder Erfindung ist daher, ein Verfahren zu beschreiben, durch dasnach Änderungdes Quelltextes eines oder mehrerer Module eines modular aufgebautenProgramms eine Korrekturanweisung erstellt wird, gemäß der einneuer Programmobjektcode durch Veränderung des ursprünglichen Programmobjektcodeserzeugt wird, und nicht durch das vollständig neue Zusammenfügen derObjektcodes aller im Programm benötigten Module. [0013] DieseAufgabe wird erfindungsgemäß durch einVerfahren zum Erstellen einer Korrekturanweisung nach dem kennzeichnendenTeil des Anspruchs 1 gelöst. [0014] Daserfindungsgemäße Verfahrenbasiert auf der Grundidee, dass Änderungenim Quelltext dem Compiler in Form von Änderungsanweisungen mitgeteiltwerden. Dadurch kann vom Compiler zu einem geänderten Modulquelltext einneuer Modulobjektcode erzeugt werden, der bei korrekt geänderter Funktionalität den höchsten Gradan Kongruenz mit dem alten Modulobjektcode aufweist. [0015] Vorteilhafterweisekann dann eine Korrekturanweisung für den Programmobjektcode durchden byte-weisen Vergleich vom geändertenmit dem ursprünglichenModulobjektcode generiert werden. [0016] Ineiner weiteren Ausführungsformkann die Korrekturanweisung alternativ während des Übersetzens vom Compiler erstelltwerden. [0017] Ineiner günstigenAusgestaltung des Verfahrens besteht die Änderungsanweisung aus der Angabevon wegfallenden Abschnitten, die aus dem ursprünglichen Modulquelltext entferntwerden, um den geändertenModulquelltext zu erhalten und/oder aus der Angabe von hinzukommendenAbschnitten und deren Positionen, die zu dem ursprünglichenModulquelltext hinzugefügtwerden, um den geänderten Modulquelltextzu erhalten. Weiterhin ist bevorzugt, diese Änderungsanweisung und den ursprünglichen Modulquelltextin einem neuen Modulquelltext anzugeben, wobei der neue Modulquelltextaus dem ursprünglichenModulquelltext und hinzukommenden Abschnitten besteht und zusätzlich wegfallendebzw. hinzukommende Abschnitte durch Schlüsselwörter gekennzeichnet sind. [0018] WeitereEinzelheiten und möglicheAusführungsformendes Verfahrens sind in den Unteransprüchen angegeben. [0019] Daserfindungsgemäße Verfahrenwird im folgenden anhand von Ausführungsbeispielen mit Hilfeder Figuren nähererläutert. [0020] Eszeigen: [0021] 1 eineschematische Repräsentation desVerfahrens zum Erstellen und Ändernvon Programmobjektcode gemäß dem Standder Technik, [0022] 2 eineschematische Repräsentationeines Ausführungsbeispielsdes erfindungsgemäßen Verfahrens, [0023] 3 einweiteres Ausführungsbeispieldes erfindungsgemäßen Verfahrens, [0024] 4 einFlussdiagramm eines Abschnitts des erfindungsgemäßen Verfahrens in einem Ausführungsbeispiel, [0025] 5 einenAuszug aus einem Quelltext und einem von einem Assembler gemäß dem Flussdiagrammin 4 erstellten Modulobjektcodes und [0026] 6 einenAuszug eines von einem Cross-Assembler erstellten Modulobjektcodeszu dem in 5 angegebenen Quelltext. [0027] In 1 istdie Erzeugung und Änderungeines Programmobjektcodes eines komplexen, modular aufgebauten Programmsgemäß dem Standder Technik dargestellt. Ein ursprünglicher Modulquelltext 10 wirdvon einem Compiler 40 in einen ursprünglichen Modulobjektcode 20 übersetzt.Dieser ursprünglicheModulobjektcode 20 wird mit Objektcode weiterer Module 23 durcheinen Linker 41 zu dem ursprünglichen Programmobjektcode 30 zusammengefügt. Zusätzlich wirdvom Linker 41 eine Tabelle mit Einbindeinformationen 35 erstellt,in der angegeben ist, an welcher Stelle im Programmobjektcode sichder Objektcode bestimmter Module befindet. [0028] Änderungenim Quelltext, die von dem ursprünglichenModulquelltext 10 zu einem geänderten Modulquelltext 11 führen, können typischerweisenur in der Weise berücksichtigtwerden, dass der geänderteModulquelltext 11 auf analoge Weise vom Compiler 40 ineinen geändertenModulobjektcode 21 übersetztwird, welcher wiederum mit dem Objektcode weiterer Module 23 vomLinker 41 zu einem geändertenProgrammobjektcode 31 zusammengefügt wird. [0029] Alternativkann das Ändernvon Programmobjektcode auch durch das manuelle Erstellen 42 einerKorrekturanweisung 33 erfolgen. Diese Korrekturanweisung 33 wirdeinem Korrekturprogramm 43 mitgeteilt, das byte-weise Änderungenam ursprünglichenProgrammobjektcode 30 vornimmt und so zu einem korrigiertenProgrammobjektcode 32 kommt. Die Korrekturanweisung 33 bestehtaus einer Folge von Einträgen 34,die den Namen des Moduls, einen neuen Wert und der Position innerhalbdes Modulobjektcodes, an dem dieser neue Wert gespeichert werdensoll, enthalten. Anhand der Einbindeinformation 35 kenntdas Korrekturprogramm 43 die Position des entsprechendenModuls innerhalb des Programmobjektcodes. Damit kann die Positiondes zu ändernden Wertesim ursprünglichenProgrammobjektcode 30 berechnet und der Wert entsprechendder Korrekturanweisung 34 geändert werden, um aus dem ursprünglichenProgrammobjektcode 30 einen korrigierten Programmobjektcode 32 zuerzeugen. Dieser Weg ist natürlichnur sinnvoll, wenn es möglichist, dass der korrigierte Programmobjektcode 32 dieselbeFunktionalitäthat, wie ein geänderterProgrammobjektcode 31, der aus Übersetzen des geänderten Modulquelltextes 11 durchden Compiler 40 und anschließendes Zusammenfügen desgeändertenModulobjektcode 21 mit dem Objektcode weiterer Module 23 durchden Linker 41, entstanden wäre. [0030] Dasmanuelle Erstellen der Korrekturanweisung 33, die auf derEbene von Objektcode arbeitet, bedingt, dass nur kleinste Änderungeninnerhalb des Programmobjektcodes durchgeführt werden können. Dazuzählenbeispielsweise das Austauschen von fehlerhaften Konstanten oderWertezuweisung oder das Änderneinzelner Sprungadressen. Komplexere Änderungen, die beispielsweisein die Ablaufstruktur eines Programms eingreifen, sind auf der Abstraktionsebenevon Maschinencodebefehlen fast nicht durchführbar. Insbesondere gilt dies,wenn der Quelltext mit Hilfe eines Cross-Assemblers oder Hochsprachencompilers übersetztwird. [0031] In 2 istan einem Ausführungsbeispiel schematischdargestellt, wie die Korrekturanweisung 33 mit ihren Einträgen 34 nachdem erfindungsgemäßen Verfahrenerstellt wird. Neben dem ursprünglichenModulquelltext 10 wird dem Compiler 40 eine Änderungsanweisung 12 bereitgestellt.Aus dem ursprünglichenQuelltext 10 und der Änderungsanweisung 12 erzeugtder Compiler 40 einen korrigierten Modulobjektcode 22.Dieser korrigierte Modulobjektcode 22 wird zusammen mitdem ursprünglichenModulobjektcode 20, der durch Übersetzen des ursprünglichenModulquelltextes 10 entstanden ist, einem Vergleicher 44 bereitgestellt.Der ursprüngliche Modulobjektcode 20 wirdmit dem korrigierten Modulobjektcode 22 byte-weise verglichen.Bei Abweichungen wird die Position des abweichenden Bytes relativzum Beginn des ursprünglichenModulobjektcodes 20 und der Wert des sich unterscheidenden Bytesdes korrigierten Modulobjektcodes 22 ermittelt. Die ermitteltePosition und der Wert sowie der Name des Moduls werden dann alsein Eintrag 34 zu der Korrekturanweisung 33 hinzugefügt. Fallsmehrerer abweichende Bytes hintereinander folgen, kann alternativnur die Position des ersten Bytes und eine Folge von Werten sowieder Name des Moduls als ein Eintrag 34 zu der Korrekturanweisung 33 hinzugefügt werden. [0032] Esist möglich,dass eine Folge von neuen Werten eine Adresse innerhalb des Objektcodeseines weiteren Moduls 23 angeben. In dem Fall wird auchder Name des anderen Moduls sowie die Adresse der Korrekturanweisung 33 alsEintrag 34 hinzugefügt. [0033] Gemäß der Informationenaus den Eintragen 34 der Korrekturanweisung 33 erstelltdas Korrekturprogramm 43 dann unter Zuhilfenahme der Einbindeinformation 35 ausdem ursprünglichenProgrammobjektcode 30 den korrigierten Programmobjektcode 32. [0034] Imerfindungsgemäßen Verfahrenwird dem Compiler 40 nicht ein geänderter Modulquelltext 11 bereitgestellt,sondern der ursprünglicheModulquelltext 10 und die Änderungsanweisung 12.Diese Änderungsanweisung 12 beschreibtin einem vorgegebenen Format, auf welche Weise aus dem ursprünglichenModulquelltext 10 der geänderte Modulquelltext 11 entsteht.Beispielsweise kann angegeben werden, welche Abschnitte beim Übergangvom ursprünglichenModulquelltext 10 zum geänderten Modulquelltext 11 wegfallensollen, und welche Abschnitte hinzukommen sollen. [0035] Änderungenan einem Quelltext werden in der Regel von dieser Form sein. Inden seltensten Fällenwerden die Änderungenso grundlegender Natur sein, dass sich nicht viele Teilstücke oderAbschnitte des ursprünglichenQuelltextes 10 auch im geänderten Modulquelltext 11 wiederfinden.Beim Vorgang des Assemblierens führengleiche Abschnitte im Modulquelltext auch notwendigerweise zu gleichenAbschnitten im Modulobjektcode, beim Crossassemblieren oder beimCompilen aus einer Hochsprache ist dies nicht mehr zwingend derFall, kann beim Einsatz eines geeigneten Compiler 40 abererreicht werden. [0036] Wirdder geänderteModulquelltext 11 jedoch vom einem Compiler 40 im üblichenVerfahren übersetzt,befinden sich eventuell gleiche Abschnitte des ursprünglichenModulobjektcodes 20 und des geänderten Modulobjektcodes 21 bedingtdurch eine unterschiedliche Längevon hinzukommenden oder wegfallenden Abschnitten an unterschiedlichenPositionen innerhalb der Dateien wieder. Trotz prinzipiell vorhandenergleicher Abschnitte unterscheiden sich der ursprüngliche Modulobjektcode 20 undder geänderteModulobjektcode 21 damit in einem byte-weisen Vergleichgrundlegend. Wird dem Compiler 40 dagegen statt des geändertenModulquelltextes 11 der ursprüngliche Modulquelltext 10 und Änderungsanweisungen 12 mitgeteilt,sind gleichbleibende Abschnitte im Modulquelltext gekennzeichnet,und könnenvom Compiler 40 in ihrer Entsprechung als Objektcode ander selben Stelle im Modulobjektcode positioniert werden, an dersie im ursprünglichenModulobjektcode 20 zu finden waren. Der so entstandene Modulobjektcodeweist die gleiche Funktionalitätwie der geänderteModulobjektcode 21 auf, unterscheidet sich in einem byte-weisenVergleich vom ursprünglichenModulobjektcode 20 aber so wenig wie möglich. Er wird zur Unterscheidungdaher korrigierter Modulobjektcode 22 genannt. [0037] Dieserkorrigierte Modulobjektcode 22 wird in dem Vergleicher 44 byte-weisemit dem ursprünglichenModulobjektcode 20 verglichen. Aus dem Vergleich werdendie Einträge 34 derKorrekturanweisung 33 erstellt, die in bekannter Art vomKorrekturprogramm 43 ausgewertet werden. [0038] Daserfindungsgemäße Verfahrenkann dann garantiert ausgeführtwerden, wenn die Länge allerObjektcodeabschnitte von wegfallenden Abschnitten des Quelltextesdie Längealler Objektcodeabschnitte von hinzukommenden Abschnitten des Quelltextes übersteigt.Im anderen Fall ist nur das Erstellen eines geänderten Programmobjektcodes 31 gemäß dem Standder Technik durch Übersetzendes geändertenModulquelltextes 11 und Zusammenfügen der Objektcodes aller Moduledurch den Linker 41 möglich.Ein Ausführungsbeispieldes Verfahrens zum Erstellen des korrigierten Modulobjektcodes 22 wirdweiter unten in 4 anhand eines Flussdiagrammsim Detail erläutert. [0039] In 3 isteine weitere möglicheAusgestaltung des erfindungsgemäßen Verfahrensdargestellt. Der ursprünglicheModulquelltext 10 ist zusammen mit den Änderungsanweisungen 12 sowieSchlüsselwörtern 14,die wegfallende und hinzukommende Abschnitte kennzeichnen, als einmodifizierter Modulquelltext 13 angegeben. Der Compiler 40 erstelltaus diesem modifizierten Modulquelltext 13 sowohl den korrigiertenModulobjektcode 22 als auch gleichzeitig die Korrekturanweisung 33,die in bekannter Art weiterverarbeitet wird. [0040] DasZusammenfügenvon Änderungsanweisung 12 samtSchlüsselwörtern 14 mitdem ursprünglichenModulquelltext 10 zu einem modifizierten Modulquelltext 13 stelltfür denAnwender eine bequeme Art des Einfügens von Änderung in den ursprünglichenModulquelltext 10 dar. Die Schlüsselwörter 14 fungierenals sogenannte Präcompilerdirektiven.Der Aufbau des modifizierten Modulquelltextes 13 ist dabeikompatibel mit einer üblichenBetriebsweise von Compilern, bei der über Präprozessordirektiven Einflussauf den Ablauf des Übersetzungsvorgangsgenommen werden kann. [0041] DerCompiler 40 ist in diesem Ausführungsbeispiel so ausgelegt,dass immer dann, wenn dem korrigierten Modulobjektcode 22 Objektabschnitte hinzufügt werden,die im ursprünglichenModulobjektcode 20 nicht vorkommen, bzw. wenn im korrigiertenModulobjektcode 22 Abschnitte nicht vorkommen, die im ursprünglichenModulobjektcode 20 enthalten waren, diese Änderungenin Form von Einträgen 34 direktauch in die Korrekturanweisung 33 geschrieben werden. Fallsdas erfindungsgemäße Verfahrenauf Grund des Umfangs der eingefügtenAbschnitte nicht erfolgreich durchgeführt werden kann, kann in diesemAusführungsbeispielder Compiler 40 so ausgelegt sein, dass nach Ausgabe einesentsprechenden Hinweises an den Benutzer keine Korrekturanweisung 33 erstelltwird und statt des korrigierten Modulobjektcodes 22 dannautomatisch der geänderteModulobjektcode 21 erstellt wird. [0042] 4 zeigtin Form eines Flussdiagramms ein Ausführungsbeispiel für den Teildes Verfahrens, nach dem aus dem modifizierten Modulquelltext 13 derkorrigierte Modulobjektcode 22 erstellt werden kann. [0043] ZuBeginn des Verfahrens wird ein Speicherbereich definiert, der Modulobjektcodeaufnehmen kann und ein Zeiger definiert, der auf die aktuelle Positiondes Übersetzungsprozessesim modifizierten Modulquelltext 13 zeigt. Der Speicherbereichfür den Modulobjektcodesei zu Beginn leer und die Übersetzungspositionwird auf den Anfang des Quelltextes gesetzt. Die Bezeichnung derfolgenden Schritte folgt dem Patentanspruch 4. [0044] ImSchritt a wird der modifizierte Modulquelltext 13 vom Compiler 40 übersetzt,bis das Schlüsselwort 14 „REPOLD" oder das Ende desmodifizierte Modulquelltextes 13 erreicht sind. Der indiesem Schritt a entstandene Objektcode wird im Schritt b dem Speicherbereichfür Modulobjektcodezugefügt. Dadieser zu Beginn des Verfahrens als leerer Speicherbereich definiertwurde, entspricht dieser Schritt dem Speichern des Objektcodes.In Schritt c wird der modifizierte Modulquelltextes 13 weiter übersetztbis zum Schlüsselwort 14 „REPNEW" bzw. bis zum Endedes modifizierte Modulquelltextes 13. Die Länge desin diesem Schritt entstandenen Objektcodes wird als erste Länge gespeichert,der Objektcode selber verworfen. Falls die Übersetzungsposition bereitsin Schritt a das Ende des modifizierten Modulquelltextes 13 erreichthatte, wird die erste Längeden Wert Null haben. Im nächstenSchritt d wird der modifizierte Modulquelltext 13 vom Compiler weiter übersetzt,bis das Schlüsselwort 14 „REPEND" auftaucht oder dasEnde des modifizierte Modulquelltextes 13 erreicht ist.Die Längedes in diesem Schritt entstandenen Objektcodes wird als zweite Länge gespeichert,der Objektcode in diesem Fall nicht verworfen. Analog zur erstenLänge wirddie zweite Längeden Wert Null haben, falls die Übersetzungspositionin einem der vorangehenden Schritte a oder c bereits das Ende desmodifizierte Modulquelltextes 13 erreicht hatte. In derdanach folgenden Abfrage wird ermittelt, ob die erste Länge kleinerist als die zweite Länge.Falls nicht, bedeutet das, dass der Objektcode des hinzukommendenAbschnitts länger istals der Objektcode des wegfallenden Abschnitts. Damit kann das erfindungsgemäße Verfahrennicht erfolgreich durchgeführtwerden und wird abgebrochen. In einem nächsten Schritt wird untersucht,ob die Längedes Objektcodes kleiner ist als die erste Länge. Wenn das der Fall ist,wird in Schritt e der Objektcode um eine Null-Operation (NOOP) ergänzt. Abfrageund eventuelles Ergänzeneiner Null-Operation wird so oft durchgeführt, bis die Länge desObjektcodes genau gleich der ersten Länge ist. Im dann folgendenSchritt g wird der Objektcode einschließlich der angehängten Null-Operationdem Speicherbereich fürModulobjektcode hinzugefügt.Für den Fall,dass bereits in Schritt a oder c die Übersetzungsposition das Endedes modifizierten Modulquelltextes 13 erreicht hatte, wirdder Objektcode in Schritt g leer sein und somit keine Änderungam Speicherbereich fürModulobjektcode hervorrufen. Im folgenden Schritt wird erneut überprüft, ob die Übersetzungspositionam Ende des modifizierten Modulquelltextes 13 angelangtist. Wenn ja, wird das Verfahren erfolgreich beendet und der imVerlauf des Verfahrens im Speicherbereich für Modulobjektcode angesammelteObjektcode als korrigierter Modulobjektcode 22 gespeichert.Falls die Übersetzungspositionnoch nicht am Ende des modifizierten Modulquelltextes 13 angelangtist, wird das Verfahren mit Ausnahme des allerersten Schrittes,in dem der Speicherbereich fürModulobjektcode definiert und geleert wurde, wiederholt. Ein ineinem zweiten oder eventuellen weiteren Durchläufen im Schritt a entstehendenderObjektcode wird damit an den bereits bestehenden Modulobjektcodeangehängt. [0045] Dashier vorgestellte Verfahren wird abgebrochen, wenn der Objektcodeeines wegfallenden Abschnitts kürzerist als der Objektcode des direkt darauf folgenden hinzukommendenAbschnitts. Auch in diesem Fall könnte es jedoch sein, dass derObjektcode aller wegfallenden Abschnitte aufsummiert länger istals der Objektcode aller hinzukommenden Abschnitte. Das Verfahrenkönntein der Weise ausgestaltet sein, dass die Abbruchbedingung diesen Fallberücksichtigt. [0046] In 3 wurdeein Verfahren vorgestellt, bei dem die Korrekturanweisung 33 gleichwährenddes Übersetzensvom Compiler 40 erstellt wird. Im gezeigten Flussdiagrammkann diese Funktion im Schritt g implementiert werden. Die in Schrittg hinzugefügtenObjektcodeabschnitte entsprechen gerade den Abschnitten des korrigiertenModulobjektcodes 22, die sich von dem ursprünglichenModulobjektcode 20 unterscheiden und können daher an dieser Stelleleicht in Form von Einträgen 34 indie Korrekturanweisung 33 übernommen werden. [0047] 5 verdeutlichtanhand eines Beispiels die Funktionsweise des erfindungsgemäßen Verfahrensfür einenAssembler als Compiler. Im oberen linken Teil ist ein Abschnittdes ursprünglichenModulquelltextes 10 angegeben, der hier aus drei Assemblerbefehlenbesteht. Im oberen rechten Abschnitt ist der modifizierte Modulquelltext 13 angegeben.Nach einem ersten Assemblerbefehl, der sich gegenüber demursprünglichenModulquelltext 10 nicht geändert hat, deutet das Schlüsselwort 14 „REPOLD" den Beginn eineszu ersetzenden Abschnitts an. Im gezeigten Beispiel besteht derzu ersetzende Abschnitt aus lediglich einem Befehl. Das darauffolgendeSchlüsselwort 14 „REPNEW" kennzeichnet denBeginn eines neu hinzukommenden Abschnitts, der in diesem Fall ebenfallsaus nur einem Befehl besteht und durch das Schlüsselwort 14 „REPEND" beendet wird. Dersich anschließendeTeil des modifizierten Modulquelltextes 13 entspricht wiederdem ursprünglichen Modulquelltext 10. [0048] Imunteren Teil von 5 sind auf der linken Seiteder ursprünglicheModulobjektcode 20, der durch Übersetzen des ursprünglichenModulquelltextes 10 entstanden ist, und auf der rechtenSeite der korrigierte Modulobjektcode 22, der nach demerfindungsgemäßen Verfahrenaus dem modifizierten Modulquelltext 13 entstanden ist.Zur Verdeutlichung sind ganz links die Hexadezimaladressen der entsprechendenMaschinencodebefehle als Position des Objektcodes innerhalb derentsprechenden Dateien angegeben. Ebenfalls zur Verdeutlichung sind diedem Objektcode entsprechenden Assemblerbefehle mit angegeben, diein dieser Form natürlichim Modulobjektcode nicht enthalten sind. Im korrigierten Modulobjektcode 22 istzu sehen, dass die Maschinencoderepräsentation des hinzugekommenenBefehls eine Längevon 4 Byte aufweist, wobei ein Byte in der benutzten Kodierung jeweilszwei Hexadezimalzeichen aufnimmt. Der wegfallende Maschinencodebefehlhat hingegen im ursprünglichenModulobjektcode 20 eine Länge von 6 Bytes hat. Entsprechenddes Verfahrens nach 4 wurde der Längenunterschieddurch das Einfügenvon Null-Operationen ausgeglichen. In diesem Beispiel wurde genau eineNull-Operation eingefügt, da eineNull-Operation in der hier dargestellten Maschinencoderepräsentationeine Längevon 2 Byte hat. [0049] Allenachfolgenden Maschinencodebefehle befinden sich im korrigiertenModulobjektcode 22 an der gleichen Position innerhalb derDatei wie im ursprünglichenModulobjektcode 20. Dadurch können zum einen durch einenbyte-weisen Vergleich beider Modulobjektcodes Unterschiede schnellausfindig gemacht werden, zum anderen ist sichergestellt, dass alleEinsprungadressen, die sich im weiteren Verlauf des Modulobjektcodesbefinden, nach wie vor korrekt adressiert werden. [0050] In 6 istanalog zur 5 die Erstellung des korrigiertenModulobjektcodes 22 anhand des erfindungsgemäßen Verfahrensdurch einen Cross-Assembler dargestellt. Dem Beispiel liegt ebenfallsder Quelltext von 5 zugrunde. Aus dem ursprünglichenModulobjektcode 20 auf der linken Seite ist ersichtlich,dass die Übertragungdes einen wegfallenden Assemblerbefehls des ursprünglichenModulquelltextes 10 zu insgesamt acht Maschinencodebefehlen,die jeweils 4 Byte lang sind, führt.Ein solcher Fall entsteht typischerweise, wenn Assemblerbefehle für einenProzessor mit CISC-Architektur (Complex Instruction Set Computer)in den Maschinencode eines Prozessors mit RISC-Architektur (Reduced Instruction SetComputer) durch einen Cross-Assembler übersetzt wird. Im korrigiertenModulobjektcode 22 ist ersichtlich, dass der im modifiziertenModulquelltext 13 hinzugekommene Befehl durch einen einzigen,4 Byte langen Maschinencodebefehl repräsentiert wird. [0051] Entsprechendwurden vom Compiler 40 nach dem erfindungsgemäßen Verfahrensieben Null-Operationen eingefügt,die je ebenfalls eine Längevon 4 Byte aufweisen. [0052] Beim Übersetzenvon Quelltext durch einen Assembler gibt es eine umkehrbar eindeutigeBeziehung zwischen dem Quelltext und dem Objektcode. Im Fall einesCross-Assemblers oder beim Compilieren von Quelltext einer Hochsprachegibt es diese Eindeutigkeit nicht mehr. Der Compiler hat beim Übersetzungsvorganggewisse Freiheitsgrade, die zur Optimierung des erzeugten Objektcodesgenutzt werden. Es kann beispielsweise sein, dass beim Cross-AssemblierenMaschinencodebefehle füreinen Prozessor erzeugt werden, der eine größere Anzahl von Registern besitztals von den Assemblerbefehlen adressiert werden können. Dienicht adressierbaren Register könnendann vom Compiler zur Speicherung von Zwischenergebnissen eingesetzt werden.Solche Optimierungsschritte müssenbeim Abarbeiten des modifizierten Modulquelltextes 13 vomCompiler 40 berücksichtigtwerden. Es kann beispielsweise notwendig sein, dass am Ende vonhinzukommenden Modulcodeabschnitten die in diesen Abschnitten gemachten Änderungenan Registern, die zuvor zur Zwischenspeicherung von Ergebnissen zurOptimierung eingesetzt wurden, wieder rückgängig gemacht werden. Ähnlicheskann auftreten, wenn durch den Cross-Assembler Maschinencodebefehle für einenProzessor erzeugt werden, der übereinen breiteren Adress- oder Datenbus verfügt, der durch die Assemblersprachedes Modulquelltextes repräsentiertwird. In diesem Fall muss ein korrektes Be- oder Entladen von Adressierungs-oder Datenregistern am Beginn und am Ende von hinzukommenden Modulcodeabschnittenberücksichtigtwerden. 10 ursprünglicherModulquelltext 11 geändert Modulquelltext 12 Änderungsanweisung 13 modifizierterModulquelltext 14 Schlüsselwörter 20 ursprünglicherModulobjektcode 21 geänderte Modulobjektcode 22 korrigierterModulobjektcode 23 Objektcodeweiterer Module 30 ursprünglicherProgrammobjektcode 31 geänderterProgrammobjektcode 32 korrigierterProgrammobjektcode 33 Korrekturanweisung 34 Eintragder Korrekturanweisung 35 Einbindeinformation 40 Compiler 41 Linker 42 manuellesErstellen der Korrekturanweisung 43 Korrekturprogramm 44 Vergleicher
权利要求:
Claims (7) [1] Verfahren zum Erstellen einer Korrekturanweisung(33) zur Änderungvon Programmobjektcode eines auf der Ebene der Quelltexte modularaufgebauten Programms bei Änderungenim Quelltext eines Moduls, wobei – ein ursprünglicher Modulquelltext (10), – ein durch Übersetztendes ursprünglichenModulquelltextes (10) durch einen Compiler (40)entstandener ursprünglicherModulobjektcode (20), – Objektcode weiterer Module(23), – einursprünglicherProgrammobjektcode (30), der durch Zusammenfügen desModulobjektcodes (20) mit dem Objektcode weiterer Module(23) durch einen Linker (41) entstanden ist, – eine Änderungsanweisung(12), deren Anwendung auf den ursprünglichen Modulquelltext (10)einen geändertenModulquelltext (11) ergibt, vorhanden sind, dadurchgekennzeichnet, dass – unterVerwendung des ursprünglichenModulquelltextes (10) und der Änderungsanweisung (12)ein korrigierter Modulobjektcode (22) derart erzeugt wird, dasssich Objektcodeabschnitte, die Abschnitten des ursprünglichenModulquelltextes (10) entsprechen, die nicht von den Änderungsanweisungen(12) betroffen sind, an der selben relativen Position innerhalbdes korrigierten Modulobjektcodes (22) befinden, an dersie sich auch im ursprünglichenModulobjektcode (20) befinden und dass der korrigierteModulobjektcode (22) die gleiche Länge aufweist, wie der ursprünglicheModulobjektcode (20) und – aus einem Vergleich des ursprünglichenModulobjektcodes (20) mit dem korrigierten Modulobjektcode (22)die Korrekturanweisung (33) erstellt wird. [2] Verfahren nach Anspruch 1, dadurch gekennzeichnet,dass die Änderungsanweisungen(12) – ausder Angabe von wegfallenden Abschnitten bestehen, die aus dem ursprünglichenModulquelltext entfernt werden, um den geänderten Modulquelltext (11)zu erhalten, und/oder – ausder Angabe von hinzukommenden Abschnitten und deren Position bestehen,die zu dem ursprünglichenModulquelltext hinzugefügtwerden, um den geändertenModulquelltext (11) zu erhalten. [3] Verfahren nach Anspruch 2, dadurch gekennzeichnet,dass die Änderungsanweisungen(12) in einem modifizierten Modulquelltext (13)angegeben sind, wobei der modifizierte Modulquelltext (13)aus dem ursprünglichenModulquelltext (10) besteht und zusätzlich – in demmodifizierten Modulquelltext (13) die wegfallenden Abschnittemit vorgegebenen Schlüsselwörtern (14)gekennzeichnet sind und gegebenenfalls – in dem modifizierten Modulquelltext(13) hinzukommende Abschnitte, die sich an wegfallendeAbschnitte anschließen,eingefügtsind und die ebenfalls mit Schlüsselwörtern (14)gekennzeichnet sind. [4] Verfahren nach Anspruch 3, dadurch gekennzeichnet,dass der korrigierte Modulobjektcode (21) aus dem ursprünglichenModulobjektcode (20) durch den Compiler (40) gebildetwird, indem a. der modifizierte Modulquelltext (13)bis zum Beginn des ersten bzw. des nächsten auftretenden wegfallendenAbschnitts in Objektcode übersetztwird, b. der in Schritt a entstandene Objektcode als korrigierterModulobjektcode (22) gespeichert wird, c. der modifizierteModulquelltext (13) weiter bis zum Ende des wegfallendenAbschnitts in Objektcode übersetztwird, und die Längedes in diesem Schritt entstandenen Objektcodes als erste Länge gespeichertwird, d. der modifizierte Modulquelltext (13) weiterbis zum Ende eines gegebenenfalls hinzukommenden Abschnitts in Objektcode übersetztwird, und die Länge desin diesem Schritt entstandenen Objektcodes als zweite Länge gespeichertwird, e. ein Objektcodeabschnitt zusammengesetzt wird aus demim Schritt d entstandenen Objektcode und so vielen Nulloperationen,bis die Längedes Objektcodeabschnitts der ersten Länge entspricht, falls die ersteLänge größer odergleich der zweiten Längeist, f. das Verfahren mit einer Fehlermeldung abbricht, fallsdie erste Längekleiner als die zweite Längeist, g. der Objektcodeabschnitt an den korrigierten Modulobjektcode(22) angehängtwird, h. die Schritte a bis g wiederholt werden, falls weitere wegfallendeAbschnitte im modifizierten Modulquelltext (13) vorhandensind, wobei das Übersetztenan der zuvor erreichten Stelle im modifizierten Modulquelltext (13)fortgesetzt wird und der in Schritt a entstehende Objektcode imSchritt b an den korrigierten Modulobjektcode (22) angehängt wird,und i. der modifizierte Modulquelltext (13) von derzuvor erreichten Stelle an bis zu seinem Ende in Objektcode übersetztwird, falls keine weiteren wegfallenden Abschnitte im modifiziertenModulquelltext (13) vorhanden sind, und der in diesem Schrittentstandene Objektcode an den geändertenModulobjektcode (22) angehängt wird. [5] Verfahren nach Anspruch 4, dadurch gekennzeichent,dass die Korrekturanweisung (33) erstellt wird, indem – der ursprünglicheModulobjektcode (20) mit dem korrigierten Modulobjektcode(22) byte-weise verglichen wird, – bei Abweichungen die Positionrelativ zum Beginn des ursprünglichenModulobjektcodes (20) und der Wert des sich unterscheidendenBytes des korrigierten Modulobjektcodes (22) ermitteltwerden, – dieim vorangehenden Schritt ermittelte Position und der Wert sowieder Name des Moduls als ein Eintrag (34) zu der Korrekturanweisung(33) hinzugefügt werden, – optionalbei aufeinanderfolgenden Abweichungen nur die erste Position undeine Folge von Werten sowie der Name des Moduls als ein Eintrag(34) zu der Korrekturanweisung (33) hinzugefügt werden, – ermitteltwird, ob eine Folge von geändertenBytes eine Adresse innerhalb des Objektcodes eines weiteren Moduls(23) angibt, und der Name des anderen Moduls sowie dieAdresse der Korrekturanweisung (33) hinzugefügt werden. [6] Verfahren nach Anspruch 4, dadurch gekennzeichnet,dass die Korrekturanweisung (33) während der Bearbeitung des modifiziertenModulquelltextes (13) vom Compiler (40) erstelltwird, indem – für jedenObjektcodeabschnitt, der einem wegfallenden oder hinzukommendenAbschnitt im modifizierten Modulquelltext (13) entspricht,die Position relativ zum Beginn des ursprünglichen Modulobjektcodes (20)und der Wert jedes Bytes des Objektcodeabschnitts ermittelt wird, – die imvorangehenden Schritt ermittelte Position und der Wert sowie derName des Moduls als ein Eintrag (34) zu der Korrekturanweisung(33) hinzugefügt werden, – optionalbei aufeinanderfolgenden Abweichungen nur die erste Position undeine Folge von Werten sowie der Name des Moduls als ein Eintrag(34) zu der Korrekturanweisung (33) hinzugefügt werden, – ermitteltwird, ob eine Folge von geändertenBytes eine Adresse innerhalb des Objektcodes eines weiteren Moduls(23) angibt, und der Name des anderen Moduls sowie dieAdresse der Korrekturanweisung (33) hinzugefügt werden. [7] Verfahren nach einem der Ansprüche 1 bis 6, dadurch gekennzeichnet,dass beim Erstellen der Korrekturanweisung (33) eventuellgetroffene Maßnahmendes Compilers (40) zur Optimierung des ursprünglichen(20) oder korrigierten (22) Modulobjektcodes berücksichtigtwerden, insbesondere falls der Compiler (40) ein Hochsprachencompileroder ein Cross-Assemblerist.
类似技术:
公开号 | 公开日 | 专利标题 US5193180A|1993-03-09|System for modifying relocatable object code files to monitor accesses to dynamically allocated memory US5671416A|1997-09-23|Apparatus and a method for searching and modifying source code of a computer program US5577253A|1996-11-19|Analyzing inductive expressions in a multilanguage optimizing compiler US6247174B1|2001-06-12|Optimization of source code with embedded machine instructions AU2002318459B2|2007-08-09|Programming language extensions for processing data representation language objects and related applications US5675805A|1997-10-07|Programming system for generating client and server programs from an undistributed application program US5408665A|1995-04-18|System and methods for linking compiled code with extended dictionary support US7103883B2|2006-09-05|System and method for translating include files US6077315A|2000-06-20|Compiling system and method for partially reconfigurable computing US6085029A|2000-07-04|Method using a computer for automatically instrumenting a computer program for dynamic debugging US4860203A|1989-08-22|Apparatus and method for extracting documentation text from a source code program US5230049A|1993-07-20|Program source code translator EP0464526B1|1997-04-23|Kompilerzwischensprache verwendender Installierer für architekturunabhängiges Vertriebsformat | US5276881A|1994-01-04|ANDF producer using the HPcode-Plus compiler intermediate language US6173441B1|2001-01-09|Method and system for compiling source code containing natural language instructions US6748584B1|2004-06-08|Method for determining the degree to which changed code has been exercised US5339428A|1994-08-16|Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register US7530061B2|2009-05-05|Programmatic access to the widest mode floating-point arithmetic supported by a processor US5546586A|1996-08-13|Method and apparatus for vectorizing the contents of a read only memory device without modifying underlying source code Jones1994|The implementation of the Gofer functional programming system US7559050B2|2009-07-07|Generating software development tools via target architecture specification US6243864B1|2001-06-05|Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths US5428786A|1995-06-27|Branch resolution via backward symbolic execution US5317740A|1994-05-31|Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies US5652889A|1997-07-29|Alternate execution and interpretation of computer program having code at unknown locations due to transfer instructions having computed destination addresses
同族专利:
公开号 | 公开日 DE102004022183B4|2006-04-13|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
法律状态:
2005-12-01| OP8| Request for examination as to paragraph 44 patent law| 2006-10-05| 8364| No opposition during term of opposition| 2011-04-13| R084| Declaration of willingness to licence| 2012-02-23| R081| Change of applicant/patentee|Owner name: FUJITSU TECHNOLOGY SOLUTIONS INTELLECTUAL PROP, DE Free format text: FORMER OWNER: FUJITSU SIEMENS COMPUTERS GMBH, 80807 MUENCHEN, DE Effective date: 20111229 | 2012-02-23| R082| Change of representative|Representative=s name: EPPING HERMANN FISCHER, PATENTANWALTSGESELLSCH, DE Effective date: 20111229 Representative=s name: EPPING HERMANN FISCHER PATENTANWALTSGESELLSCHA, DE Effective date: 20111229 |
优先权:
[返回顶部]
申请号 | 申请日 | 专利标题 DE200410022183|DE102004022183B4|2004-05-05|2004-05-05|Verfahren zum Ändern von Programmobjektcode bei Quelltextänderungen|DE200410022183| DE102004022183B4|2004-05-05|2004-05-05|Verfahren zum Ändern von Programmobjektcode bei Quelltextänderungen| 相关专利
Sulfonates, polymers, resist compositions and patterning process
Washing machine
Washing machine
Device for fixture finishing and tension adjusting of membrane
Structure for Equipping Band in a Plane Cathode Ray Tube
Process for preparation of 7 alpha-carboxyl 9, 11-epoxy steroids and intermediates useful therein an
国家/地区
|